package org.xwb.jmm;

public class VolatileDemo {
    static volatile int i = 0;
    public static void main(String[] args) {
// 线程A
        new Thread(() -> {
            try {
                Thread.sleep(500);
            } catch (InterruptedException e) {
                throw new RuntimeException(e);
            }
            i = 3; // 立即写回主内存
        }).start();

// 线程B
        new Thread(() -> {
            int temp = i; // 读取到i=0（此时A可能还没执行）
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                throw new RuntimeException(e);
            }
            // 假设此时A执行了i=3并写回主内存
            if (temp == 0) { // 线程B仍用temp=0判断，完全不知道i已变成3
                System.out.println("i is 0"); // 错误输出
            }
        }).start();
    }
}
